feat: Neuroglancer Views polish (PR 7, ngviews-07-cart-and-viewer-polish) - #431
Open
allison-truhlar wants to merge 21 commits into
Open
feat: Neuroglancer Views polish (PR 7, ngviews-07-cart-and-viewer-polish)#431allison-truhlar wants to merge 21 commits into
allison-truhlar wants to merge 21 commits into
Conversation
Metadata + channels are fetched from the internal /api/content URL (credentialed) instead of the proxied-path URL, so every cart dataset can be inspected before a View is created - matching the behavior users already get on the browse page.
Drop the redundant h6 title (already shown in the breadcrumb) and move the action buttons up to the breadcrumb row. Frees vertical space for the Neuroglancer iframe.
…ontal scroll - Fix the missing 6th grid track so the Actions cell stops wrapping to a second row on each entry. - Add an optional gridColsStyle prop on TableCard (inline gridTemplateColumns, alt to the static gridColsClass), since Tailwind JIT can't emit arbitrary-width classes at runtime. - The Sources column has its own drag handle at the column's right edge (thin line, primary color on hover/drag). Sources cell now shows each source path on a truncated line with a native tooltip on hover, so long paths stay clickable and inspectable without eating the whole row. - Wrap the header + body in overflow-x-auto so widening Sources doesn't push the trailing columns off-screen unreachable. - Explicit left-align across every cell (justify-start + text-left).
…restore QueryClient-free rendering
The Sources column showed each layer's path relative to its file share, which is ambiguous across shares. Resolve the FileSharePath from the layer's fsp_name and render the full path (share path plus subpath) using the viewer's path-format preference, matching how the Data Links and Jobs tables display paths. Fall back to the relative path when the share can't be resolved, such as a local environment with no central URL configured.
…cart Expanding a plain (non-OME) Zarr array in the Layer Cart showed an empty body: it has no multiscale axes to fill the dimension table and no channels to select, so the row looked broken. Show "No OME-Zarr metadata to display" when a dataset has neither axes nor channels. OME datasets keep the axis table and channel checkboxes unchanged.
The default column tracks summed to 1040px, forcing a horizontal scrollbar the first time the Views page loads. Narrow the Name and Sources columns and tighten the Sharing, Updated, and Actions tracks so the default layout fits. Name truncates with a tooltip, and Sources stays resizable for long paths.
The new "Create a view of this dataset" viewer icon's aria-label contains "Create", so the broad page-wide button locator /confirm|create|yes/i now matches it alongside the actual dialog confirm button, causing a strict-mode violation. Scope the locators to the open dialog to disambiguate.
The Views work added a "Create a view of this dataset" button to the zarr metadata preview. Its accessible name matches the page-wide /confirm|create|yes/ locator these tests used for the data-link confirmation button, so Playwright's strict mode failed on two matching elements. This passed locally against a stale bundle without the button and failed only in CI, which builds fresh. Scope the locator to the dialog, matching the pattern already used in data-link-operations.spec.ts, so the preview button no longer collides.
The viewer route rendered the full app navbar above the iframe, duplicating chrome and wasting vertical space. Suppress the global navbar on /view/:readKey and give NeuroglancerView its own collapsed bar with the logo, profile menu, and tooltipped icon buttons instead of labeled buttons. Move the theme toggle and GitHub link out of the navbar and into ProfileMenu (GitHub also gets a Help-page entry) so both the main navbar and the viewer's bar share one menu. Extract LogoSvg to its own file so it's reusable outside Navbar.tsx, and read/restore the theme in MainLayout (always mounted) instead of Navbar so dark mode still applies on routes that hide the navbar.
allison-truhlar
force-pushed
the
ngviews-07-cart-and-viewer-polish
branch
from
August 25, 2026 17:21
609c7fb to
bcc80d0
Compare
…n a11y MainLayout and NeuroglancerView tests were stale against bcc80d0: the navbar is now suppressed on /view/:readKey, and ProfileMenu renders in the viewer's own bar without a ProfileContextProvider in these tests. Also fixes a real bug: ToolbarIconButton's aria-label landed on the tooltip wrapper div instead of the button, leaving icon buttons with no accessible name.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up polish on the Neuroglancer Views stack, addressing three issues raised in the last dev meeting round.
What changed
CartDatasetRownow fetches OME-Zarr metadata and channel labels from the internal/api/content/<fsp>/<path>URL (credentialed), so every valid Zarr dataset in the cart can be inspected before a View is created. Previously the "Channels load after the View is created" hint appeared for any dataset that didn't already have a proxied path, which was inconsistent — the same dataset with an existing Data Link had full expansion. The proxied-path lookup and itsuseAllProxiedPathsQuerydependency drop out ofCartListentirely.h6title (already shown in the breadcrumb) is gone, and the action buttons — Copy link, Download JSON, Open external, Fullscreen — move up to sit on the breadcrumb row. Gives the iframe more vertical space.gridColsStyleprop onTableCard(inlinegridTemplateColumns) as an alt to the staticgridColsClass, since Tailwind JIT can't emit arbitrary-width classes at runtime. Existing tables keep theirgridColsClassand are unaffected.titletooltip on hover — links remain clickable and navigate to the file browser.overflow-x-autoso widening Sources doesn't push Sharing, Updated, and Actions off-screen out of reach.justify-start+text-left.Verified
pixi run node-check— no new type errors (pre-existing failures in unrelated files:ContextMenu.tsx,PathFormatOptions.tsx,PermissionsTable.tsx,sshKeyQueries.ts,ColorsPageSync.test.ts).pixi run node-eslint-check— 0 errors, only a pre-existing unused-import warning inNeuroglancerOptions.tsx.pixi run test-frontend— 384 tests pass.CartList.test.tsx,CartTab.test.tsx, andngViewsColumns.test.tsxupdated for the new URL source and the resizable-column hook signature.Not verified
Manual dev-server browser check. The changes are visual, so a quick eyeball pass on the three affected surfaces is worthwhile before merge.